home *** CD-ROM | disk | FTP | other *** search
/ Aminet 6 / Aminet 6 - June 1995.iso / Aminet / util / cli / version.lha / Version / version.dok next >
Encoding:
Text File  |  1995-01-04  |  11.5 KB  |  401 lines

  1.  
  2.  
  3.                            Objekt-Name:  Version
  4.  
  5.                   $VER: Version 2.92 (95.01.04 18:44:23)
  6.  
  7.                      Copyright 1993-95 bei Lutz Hanke
  8.  
  9.  
  10.  
  11.  
  12. Inhalt
  13. ------
  14.   1     Was ist Version                     39
  15.   2     Rechtslage                          46
  16.   2.1   Autor                               75
  17.   2.2   Programm Umfang                     89
  18.   2.3   System Voraussetzung / Start        98
  19.   3     Anleitung                          108
  20.   3.1   Option:  <>                        136
  21.   3.2   Option:  <NAME>                    146
  22.   3.3   Option:  <VERSION>                 156
  23.   3.4   Option:  <REVISION>                165
  24.   3.5   Option:  <FULL>                    174
  25.   3.6   Option:  <HELP>                    196
  26.   4     Intern Struktur                    204
  27.   5     Extern Struktur für Data           231
  28.   6     Extern Struktur für Programme      247
  29.   6.1   DataTab Macros                     323
  30.   7     Bugs (Fehler)                      369
  31.   8     Danksagung                         376
  32.   9     History                            383
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39. 1 Was ist Version
  40. -----------------
  41.   Version ist als Ersatz für den Workbench Versions Befehl gedacht.
  42.  
  43.  
  44.  
  45.  
  46. 2 Rechtslage
  47. ------------
  48.   Das vorliegende Programm-Paket ist Freeware. Alle Rechte liegen bei mir,
  49.   dem Programmierer. Eine kommerzielle Nutzung ist nicht gestattet.
  50.  
  51.   Das Programm darf unter folgenden Bedingungen, auf PD-, Shareware- Serien
  52.   oder Netzwerken vertrieben werden.
  53.  
  54.     - Es müssen die unter "Programm Umfang" genannte Dateien in
  55.       unveränderter Form und Inhalt immer mit kopiert werden.
  56.  
  57.     - Weiterhin ist das Packen gestattet, wenn der Originalzustand wieder
  58.       hergestellt werden kann (z.B. LHA, ZOO, PP).
  59.  
  60.     - Den Vertriebspreis lege ich nicht fest, da es immer neue Medien gibt,
  61.       und damit auch andere Herstellungskosten. Wer mehr als den Shareware
  62.       Beitrag bezahlt ist selbst Schuld.
  63.  
  64.   Zum Schluß möchte ich noch darauf hinweisen, daß ich für die korrekte
  65.   Funktion keine Garantie übernehme. Es ist daher immer möglich, daß eine
  66.   Fehlfunktion auftritt. Ich lehne daher jegliche Verantwortung für
  67.   derartige oder andere Folgen ausdrücklich ab. Dies gilt auch für
  68.   Folgeschäden, Personenschäden oder andere Nebenwirkungen. Bitte teilen
  69.   Sie mir eventuell auftretende Fehler mit, damit diese umgehend behoben
  70.   werden können.
  71.  
  72.  
  73.  
  74.  
  75. 2.1 Autor
  76. ---------
  77.   Da ich selbst die ganze Angelegenheit "verbrochen" habe, so können Sie
  78.   sich auch direkt bei mir registrieren, updaten oder beschweren. Meine
  79.   Adresse ist folgende:
  80.  
  81.                                 Lutz Hanke
  82.                                 Dorfstr. 43
  83.                               01825 Breitenau
  84.                                   Germany
  85.  
  86.  
  87.  
  88.  
  89. 2.2 Programm Umfang
  90. -------------------
  91.  
  92.   Version/Version ----- das Programm an sich.
  93.   Version/Version.dok - das, was Sie gerade lesen. Eine Anleitung zu Version.
  94.  
  95.  
  96.  
  97.  
  98. 2.3 System Voraussetzung / Start
  99. --------------------------------
  100.   Benötigt wird eine Amiga mit mindestens OS 2.0 . Ältere Kickstarts werden
  101.   nicht mehr unterstützt, und führen lediglich zu einem Retuncode 20.
  102.  
  103.   Der Start ist nur von die Shell möglich.
  104.  
  105.  
  106.  
  107.  
  108. 3 Anleitung
  109. -----------
  110.   Version arbeitet fast genau so wie der Workbench Versions Befehl. Deshalb
  111.   kann der Original Befehl durch "Version" voll ersetzt werden.
  112.  
  113.   Das Programm habe ich aus dem Frust heraus geschrieben. Sobald ich eine
  114.   Library umbenannt habe, z.B. um diese als 1.3 und 2.0 Version zu
  115.   kennzeichnen, kommt von dem Original Versions Befehl: "Version not
  116.   found". Dieser prüft vor dem suchen erst einmal den Typ (z.B. *.library
  117.   *.device). Sobald aber der Name umbenannt wurde (z.B. *.device_2.0), war
  118.   das Ergebnis negativ, so daß nur noch nach dem String "$VER:" gesucht
  119.   wurde. Da dies selten zu einem Erfolg führte, hatte ich das nachsehen.
  120.  
  121.   Mein Programm geht nun folgendermaßen vor:
  122.  
  123.     1. Durchsuchen der intern Library-List, Device-List. Falls Sie jedoch
  124.        extern z.B. eine Library testen wollen, die eventuell schon geladen
  125.        wurde, so geben Sie einfach den vollständigen Pfad an.
  126.  
  127.     2. Test ob File so zu laden ist
  128.  
  129.     3. suche in Libs: devs: l: locale:languages
  130.  
  131.     4. wenn nicht gefunden -> ende
  132.  
  133.  
  134.  
  135.  
  136. 3.1 Option:  <>
  137. ---------------
  138.   Ohne Option, so wird die Kickstart und die Workbench Version ermittelt.
  139.   Desweiteren werden die $Kickstart und $Workbench Variablen gesetzt.
  140.  
  141.   Ausgabeformat: Kickstart 40.62, Workbench 40.35
  142.  
  143.  
  144.  
  145.  
  146. 3.2 Option:  <NAME>
  147. -------------------
  148.   Als Name ist das zu testende Objekt anzugeben. Dies kann sowohl intern,
  149.   als auch extern vorhanden sein.
  150.  
  151.   Ausgabeformat: req.library 2.7
  152.  
  153.  
  154.  
  155.  
  156. 3.3 Option:  <VERSION>
  157. ----------------------
  158.   Nach dem Argument ist ein numerischer Wert anzugeben. Dieser wird dann
  159.   mit der ermittelten Version verglichen. Ist die angegebene Version höher,
  160.   als die des Objektes so wird der Returncode auf Warn gesetzt.
  161.  
  162.  
  163.  
  164.  
  165. 3.4 Option:  <REVISION>
  166. -----------------------
  167.   Gilt das gesagte, wie bei der Option <Version>. Warnung: der Wert 5.8 ist
  168.   GLEICH dem Wert 5.008 !! Das gilt für mein Programm und für das Original
  169.   Programm. Wer kann helfen?
  170.  
  171.  
  172.  
  173.  
  174. 3.5 Option:  <FULL>
  175. -------------------
  176.   Gibt die volle Information zu diesem Objekt aus.
  177.  
  178.   Ausgabeformat:
  179.  
  180.   req.library 2.7  Typ: Library, Found: Intern
  181.     ReqLibrary 2.7 (Mon May 25 1992)
  182.  
  183.   Typ - gibt den Objekt Typ an. Am häufigsten sind Librarys, Devices und
  184.         Files. Alle anderen müßten selbsterklärend sein.
  185.  
  186.   Found - hier wird angegeben, wo das Object gefunden wurde Intern/Extern.
  187.  
  188.   ID - ist ein fast beliebiger Text, der nähere Informationen des
  189.         Programmierers enthält. WARNUNG: bei Files und (libs ohne Init)
  190.         wird die ID analysiert. Dazu muß die ID den Commodore Richtlinien
  191.         entsprechen ( siehe unten ).
  192.  
  193.  
  194.  
  195.  
  196. 3.6 Option:  <HELP>
  197. -------------------
  198.   Und nun eine letzte Option. Wird Help angegeben, so erhalten sie
  199.   Informationen über das Programm, Version und Copyright.
  200.  
  201.  
  202.  
  203.  
  204. 4 Intern Struktur
  205. -----------------
  206.  
  207.   Wurde nun das Objekt intern gefunden, so wende ich folgende Struktur an:
  208.  
  209.   $00.l  Zeiger auf nächstes Objekt
  210.   $04.l  Zeiger auf vorheriges Objekt
  211.   $08.b  Node Typ
  212.   $09.b  füll Byte
  213.   $0a.l  Zeiger auf Modul Name      (wird verwendet)
  214.   $0e.b  Flags
  215.   $0f.b  füll Byte
  216.   $10.w  negative Size
  217.   $12.w  positive Size
  218.   $14.w  Version                    (wird verwendet)
  219.   $16.w  Revision                   (wird verwendet)
  220.   $18.l  Zeiger auf ID String       (wird verwendet)
  221.   $1c.l  sum
  222.   $20.w  opencnt (Anzahl der Tasks die, die Lib benutzen)
  223.   $22    Struct end
  224.  
  225.   Das Include File ist "exec/nodes.i". Da sind dann auch alle NT Typen
  226.   definiert.
  227.  
  228.  
  229.  
  230.  
  231. 5 Extern Struktur für Data
  232. --------------------------
  233.   Findet Version das Objekt extern, so wird es etwas komplizierter. Zu erst
  234.   werden 10 kB des Objektes in den RAM geladen. Danach wird getestet, ob es
  235.   ein Programm ist, oder ein Data File. Bei einem Datafile kommt folgende
  236.   Struktur zur Anwendung.
  237.  
  238.   "$VER: name 1.11 xyz"
  239.  
  240.   Gesucht wird nach "$VER:" danach kommt der Name OHNE Leerzeichen. Nach
  241.   der Versions / Revisions Angabe kann man beliebigen Kommentar verwenden
  242.   (z.B. Datumsangabe, Copyright, ...)
  243.  
  244.  
  245.  
  246.  
  247. 6 Extern Struktur für Programme
  248. -------------------------------
  249.   Für Librarys, Devices und Handler kommt eine andere Struktur zur
  250.   Anwendung. Diese Struktur muß im ERSTEN Hunk stehen, und darf NICHT über
  251.   mehrere Hunks verteilt werden, wie es teilweise vorkommt. Wird die
  252.   folgende Struktur nicht gefunden, oder trat ein Fehler auf, so wird
  253.   einfach die Data Struktur verwendet.
  254.  
  255. Hunk_Anfang:            ; für versehentlichen direkten Start
  256.     moveq    #-1,d0        ; Returncode (nicht ausführbar)
  257.     rts            ; und wieder zurück
  258.  
  259. Resident:            ; Library Install Werte
  260.     dc.w    $4AFC        ; RTC_MATCHWORD, Identifikation (ID)
  261.     dc.l    Resident    ; Zeiger auf residenten Teil
  262.     dc.l    CodeEnd        ; Resident Teil ende, nicht lib ende !!
  263.     dc.b    $80        ; RTF_AUTOINIT
  264.     dc.b    Version        ; Lib Version, wird vom System NICHT geprüft !
  265.     dc.b    $09        ; ID für lib, siehe Node struct
  266.     dc.b    Priority
  267.     dc.l    LibName        ; Zeiger auf den eigenen Namen
  268.     dc.l    IDString    ; Zeiger IDString
  269.     dc.l    Init        ; Zeiger auf weitere Struktur der Lib
  270.  
  271. LibName    dc.b    "my.library",0
  272.  
  273. IDString dc.b    "my.library 1.67 (14-Oct-91) Kommentar",0
  274.     ; Der IDString sollte ungefähr das obige aussehen haben. Der
  275.       Original Workbench Befehl analysiert den String ! Deshalb muß nach
  276.       dem Namen direkt die Version im obigen Format folgen !
  277.  
  278. CodeEnd        ; ende des residenten Teiles, nicht der library!!
  279.  
  280.  
  281. Init    dc.l    Lib_Size    ; Größe der lib-Struktur
  282.     dc.l    FuncTab        ; Zeiger auf libroutinen Tabelle
  283.     dc.l    DataTab        ; Zeiger auf Tabelle für Init oder "0" für
  284.                 ;  keine. Wird "0" angegeben, müssen die Werte
  285.                 ;  in der Initroutine von Hand gesetzt werden !
  286.     dc.l    InitRoutine    ; Zeiger auf eigene Initroutine der Lib
  287.  
  288.  
  289. FuncTab                ; Lib Routinen Tabelle, sind basisadressen
  290.     dc.l    Open        ; Pflicht System
  291.     dc.l    Close        ; Pflicht System
  292.     dc.l    Expunge        ; Pflicht System
  293.     dc.l    Nil        ; Pflicht System, nicht benutzt
  294.     dc.l    SetVBI        ; eigene Routinen Offsets
  295.     dc.l    InitVBOBs
  296.     dc.l    AutoScaleOn
  297.     dc.l    AutoScaleOff
  298.     dc.l    FreeJoy
  299.     dc.l    SetColors
  300.     dc.l    -1        ; Kennzeichen für Ende
  301.  
  302.  
  303. DataTab                ; Wenn nicht von Hand, dann hier alles ablegen
  304.     INITBYTE  LN_TYPE,NT_LIBRARY
  305.     INITLONG  LN_NAME,LibName
  306.     INITBYTE  LIB_FLAGS,LIBF_SUMUSED!LIBF_CHANGED
  307.     INITWORD  LIB_VERSION,Version
  308.     INITWORD  LIB_REVISION,Revision
  309.     INITLONG  LIB_IDSTRING,IDString
  310.     dc.l      0        ; Abschluß der Data Tabelle
  311.  
  312.     ; Die Macros sind im Include File exec/libraries.i gespeichert. Der
  313.       erste Wert gibt den Offset an der zweite den Wert an.
  314.  
  315.  
  316.   Hier folgen jetzt weitere Routinen, und die eigentlichen Library
  317.   Funktionen. Die Macros sind im nächsten Kapitel erklärt.
  318.  
  319.  
  320.  
  321.  
  322.  
  323. 6.1 DataTab Macros
  324. ------------------
  325.   Es gibt drei verschiedene Datentypen Byte, Word und LongWord. Die
  326.   entsprechenden Macros sind INITBYTE, INITWORD und INITLONG. Das
  327.   eigentliche (UR)macro ist INITSTRUCT. Hier nun die Struktur, die aus
  328.   INITSTRUCT entsteht.
  329.  
  330.   INITSTRUCT Size,Offset,Anzahl,Wert
  331.  
  332.   Befehls Byte %00 00 0000, Wert
  333.         |  |  |
  334.         |  |  Anzahl der Befehlsausführungen, zählt bis -1
  335.         |  |
  336.         |  Daten Size:
  337.         |  00 = longword, beginnt auf wordgrenze
  338.         |  01 = word, beginnt auf wordgrenze
  339.         |  10 = byte
  340.         |  11 = verboten
  341.         |
  342.         Befehl:
  343.         00 = Daten nach dem Befehls Byte in die Struktur übertragen
  344.              (beginnen auf wordgrenze bei .w & .l)
  345.         01 = Daten der angegebenen Länge entsprechend oft übertragen
  346.         10 = Wert nach dem Befehls Byte ist ein BYTE-Offset (zählt
  347.              ab Struktur Anfang), die Daten danach werden in die
  348.              Struktur übertragen, entsprechend dem low-nibble.
  349.         11 = Wert nach dem Befehls Byte ist ein 24 Bit Offset (3
  350.              Byte), sonst wie "10"
  351.  
  352.  
  353.   Um die Sache etwas zu vereinfachen, gibt es drei weitere Macros. Dahinter
  354.   steht, was daraus generiert wird.
  355.  
  356.   INITBYTE Offset,Wert   %11100000 $000000 $00  $00
  357.                          Befehl    Offset  Wert fill
  358.  
  359.   INITWORD Offset,Wert   %11010000 $000000 $0000
  360.                          Befehl    Offset  Wert
  361.  
  362.   INITLONG Offset,Wert   %11000000 $000000 $00000000
  363.                          Befehl    Offset  Wert
  364.  
  365.  
  366.  
  367.  
  368.  
  369. 7 Bugs (Fehler)
  370. ---------------
  371.   Keine bekannt.
  372.  
  373.  
  374.  
  375.  
  376. 8 Danksagung
  377. ------------
  378.   Gibt es keine.
  379.  
  380.  
  381.  
  382.  
  383. 9 History
  384. ---------
  385. 20.03.93 Beginn.
  386. 20.04.93 2.00 Versionsbefehl von OS2.1 gedebugt, daraus ergaben sich diverse
  387.                Änderungen meines Programms.
  388. 30.04.93 teste auf falsche offsets, da sonst Adresserror bei falschen Werten
  389. 28.12.94 2.92 überarbeitung, jetzt wird die Version nicht nur von
  390.               Programmen, sondern auch von anderen Dateien ermittelt. Wird
  391.               bei Prog eine falsche Struktur gefunden, so wird nicht mehr
  392.               abgebrochen, sondern nach "$VER:" gesucht.
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.   © 1992-95 by Lutz Hanke
  400.  
  401.